package com.hb.aspect;

import com.hb.impl.DefaultEncoreable;
import com.hb.interfaces.Encoreable;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclareParents;

@Aspect
public class EncoreableIntroducer {
    // 1、通过 @DeclareParents 注解，将 Encoreable 接口引入到 Performance bean 中
    // value 属性指定了哪种类型的 bean 要引入该接口。在本例中，也就是所有实现 Performance 的类型。（标记符后面的加号表示是 Performance 的所有子类型，而不是 Performance 本身）。
    // defaultImpl 属性指定了为引入功能提供实现的类。在这里，我们指定的是 DefaultEncoreable 提供的实现。
    // @DeclareParents 注解所标注的静态属性指明了要引入的接口。在这里，我们所引入的是 Encoreable 接口。
    // 2、测试发现扩展新增的接口可以设为 static 也可以不设为 static。
    @DeclareParents(value = "com.hb.concert.Performance+", defaultImpl = DefaultEncoreable.class)
    public Encoreable encoreable;
}
